package urlqueue

import (
	"net/url"

	"github.com/pkg/errors"
)

// MyURL
type MyURL struct {
	*url.URL

	// Referer 是 http 头的一个字段，服务器根据此字段判断URL从哪里进入
	// 下载某些网站的资源时，如果没有此字段，或者设置的值不是它想要的，则不让你下载，它认为你是盗链。
	Referer string
}

// ParseMyURL 解析字符串到 MyURL 结构体
// 如果 rawurl 没有 scheme 和 host，则设置为和 referer 相同，如果 referer 也没有则返回错误。
func ParseMyURL(rawurl, referer string) (*MyURL, error) {
	URL, err := url.Parse(rawurl)
	if err != nil {
		return nil, err
	}

	if (URL.Host == "" || URL.Scheme == "") && referer != "" {
		ref, err := url.Parse(referer)
		if err != nil {
			return nil, err
		}

		URL.Scheme, URL.Host = ref.Scheme, ref.Host
	}

	if URL.Scheme == "" || URL.Host == "" {
		return nil, errors.New("must have scheme and host attributes")
	}

	return &MyURL{URL, referer}, nil
}
